﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DTO_MechSysWeb;
using BLL_MechSysWeb;
using System.Web.Security;

namespace WEB_MechSysWeb.Paginas_Publico
{
    public partial class ClienteCadastro : System.Web.UI.Page
    {
        DTOCliente dtoCliente = new DTOCliente();
        DTOEndereco dtoEndereco = new DTOEndereco();
        DTOVeiculo dtoVeiculo = new DTOVeiculo();
        DTOUnidadeFederal dtoUnidadeFederal = new DTOUnidadeFederal();
        BLLUtilidades bllUtilidades = new BLLUtilidades();
        BLLCliente bllCliente = new BLLCliente();
        BLLEndereco bllEndereco = new BLLEndereco();
        BLLVeiculo bllVeiculo = new BLLVeiculo();
        BLLUnidadeFederal bllUnidadeFederal = new BLLUnidadeFederal();
        int veiculoID = 0;


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack) // Cada postback gera um captcha
            {
                imgCaptcha.ImageUrl = "Captcha.aspx";
                txtCaptcha.Text = "";
            }
           
            if (txtSenhaCad.Text != "")
            {
                Session["Senha"] = null;
                Session["Senha"] = txtSenhaCad.Text;
            }
            else
            {
                if (Session["Senha"] != null)
                {             
                    txtSenhaCad.Text = Session["Senha"].ToString();
                }
            }

            List<DTOUnidadeFederal> lstEstados = bllUnidadeFederal.BuscarEstadosCadastrados();

            foreach (DTOUnidadeFederal dtoUnidadeFederal in lstEstados)
            {
                if (dtoUnidadeFederal != null)
                {
                    ddlEstado.Items.Add(new ListItem(dtoUnidadeFederal.Nome, dtoUnidadeFederal.UFID.ToString()));
                }

            }
           
        }

        public bool CheckCaptcha()
        {
            string strCaptcha = txtCaptcha.Text;
            if (Session["CaptchaImageText"].ToString() == strCaptcha)
                return true;
            else
                return false;
        }

        public void Habilitar(bool status)
        {
            txtNome.Enabled = status;
            txtSobrenome.Enabled = status;
            txtDataNascimento.Enabled = status;
            txtTelefone.Enabled = status;
            txtCelular.Enabled = status;
            txtEmail.Enabled = status;
            txtRepetirEmail.Enabled = status;
            txtLoginCad.Enabled = status;
            txtRepetirLogin.Enabled = status;
            txtSenhaCad.Enabled = status;
            txtRepetirSenha.Enabled = status;
            txtCEP.Enabled = status;
            txtRua.Enabled = status;
            txtNumero.Enabled = status;
            txtComplemento.Enabled = status;
            txtBairro.Enabled = status;
            txtCidade.Enabled = status;
            txtPlaca.Enabled = status;
            txtMarca.Enabled = status;
            txtModelo.Enabled = status;
            txtAnoFab.Enabled = status;
            txtAnoMod.Enabled = status;
            txtCaptcha.Enabled = status;

            btnCadastrar.Enabled = status;
        }

        public void LimparCampos()
        {
            txtNome.Text = string.Empty;
            txtSobrenome.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtDataNascimento.Text = string.Empty;
            txtTelefone.Text = string.Empty;
            txtCelular.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtRepetirEmail.Text = string.Empty;
            txtLoginCad.Text = string.Empty;
            txtRepetirLogin.Text = string.Empty;
            txtSenhaCad.Text = string.Empty;
            txtRepetirSenha.Text = string.Empty;
            txtCEP.Text = string.Empty;
            txtRua.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtComplemento.Text = string.Empty;
            txtBairro.Text = string.Empty;
            txtCidade.Text = string.Empty;
            txtPlaca.Text = string.Empty;
            txtMarca.Text = string.Empty;
            txtModelo.Text = string.Empty;
            txtAnoFab.Text = string.Empty;
            txtAnoMod.Text = string.Empty;
            txtCaptcha.Text = string.Empty;

            imgValidacaoCPF.Visible = false;
            imgValidacaoEmail.Visible = false;
            imgValidacaoLogin.Visible = false;
            imgValidacaoSenha.Visible = false;
            imgValidacaoCaptcha.Visible = false;

            lblValidacaoCPF.Text = "";
            lblValidacaoEmail.Text = "";
            lblValidacaoLogin.Text = "";
            lblValidacaoSenha.Text = "";
            lblValidacaoCaptcha.Text = "";


        }

        protected void btnCadastrar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                int enderecoID, clienteID, veiculoID = 0;
                try
                {
                    if (FileUploadImagem.PostedFile != null && !string.IsNullOrEmpty(FileUploadImagem.PostedFile.FileName))
                    {
                        if (BLLUtilidades.ValidarExtensaoImagem(FileUploadImagem.PostedFile.FileName))
                        {
                            byte[] ImgDados = new byte[FileUploadImagem.PostedFile.ContentLength];
                            HttpPostedFile Imagem = FileUploadImagem.PostedFile;
                            string ImgTipo = FileUploadImagem.PostedFile.ContentType.ToString();
                            Imagem.InputStream.Read(ImgDados, 0, (int)FileUploadImagem.PostedFile.ContentLength);

                            dtoCliente.ImagemPerfil = ImgDados;
                            dtoCliente.ImagemTipo = ImgTipo;
                        }
                        else
                        {
                            Mensagem.ExibirEmUP("Arquivo de imagem inválido!");
                        }
                    }
                    else
                    {
                        Mensagem.ExibirEmUP("Não foi possível carregar a imagem!");
                    }

                    dtoEndereco.Rua = txtRua.Text;
                    dtoEndereco.Numero = txtNumero.Text;
                    dtoEndereco.Bairro = txtBairro.Text;
                    dtoEndereco.Complemento = txtComplemento.Text;
                    dtoEndereco.Cidade = txtCidade.Text;
                    dtoEndereco.Estado = Int32.Parse(ddlEstado.SelectedValue);
                    dtoEndereco.CEP = txtCEP.Text.Replace(".", "").Replace("-", "");

                    bllEndereco.Inserir(dtoEndereco);

                    enderecoID = bllEndereco.BuscarUltimoEnderecoID();

                    dtoCliente.Nome = txtNome.Text;
                    dtoCliente.Sobrenome = txtSobrenome.Text;
                    dtoCliente.Sexo = Convert.ToChar(rblSexo.SelectedValue);
                    dtoCliente.CPF = txtCPF.Text.Replace(".", "").Replace("-", "");
                    dtoCliente.DataNascimento = Convert.ToDateTime(txtDataNascimento.Text);
                    dtoCliente.Telefone = txtTelefone.Text.Replace("(", "").Replace(")", "").Replace("-", "");
                    dtoCliente.Celular = txtCelular.Text.Replace("(", "").Replace(")", "").Replace("-", "");
                    dtoCliente.Email = txtEmail.Text.Replace(" ", "").ToLower();
                    dtoCliente.Login = txtLoginCad.Text;
                    dtoCliente.Senha = txtSenhaCad.Text;
                    dtoCliente.Informacoes = ckbInformacoes.Checked;
                    dtoCliente.RegistroWeb = true;
                    dtoCliente.EnderecoID = enderecoID;

                    //Colocar um Summary Validation para mostrar o cliente que há campos se preencher                   

                    Membership.CreateUser(dtoCliente.Login, dtoCliente.Senha, dtoCliente.Email); // Função para criação de usuário MEMBERSHIP
                    Roles.AddUserToRole(dtoCliente.Login, "Cliente");
                    dtoCliente.UserID = (Membership.GetUser(dtoCliente.Login).ProviderUserKey).ToString(); // inicializando alunoID com o UserID de login, mandando o login como parâmetro

                    bllCliente.Inserir(dtoCliente);

                    clienteID = bllCliente.BuscarUltimoClienteID();

                    dtoVeiculo.ClienteID = clienteID;
                    dtoVeiculo.Placa = txtPlaca.Text.Replace("-", "");
                    dtoVeiculo.Marca = txtMarca.Text;
                    dtoVeiculo.Modelo = txtModelo.Text;
                    dtoVeiculo.AnoFab = Int32.Parse(txtAnoFab.Text);
                    dtoVeiculo.AnoMod = Int32.Parse(txtAnoMod.Text);

                    if (dtoVeiculo.VeiculoID == 0)
                    {
                        bllVeiculo.Inserir(dtoVeiculo);
                    }
                    else
                    {
                        bllVeiculo.Atualizar(dtoVeiculo);
                    }

                    veiculoID = bllVeiculo.BuscarUltimoVeiculoID();

                    Mensagem.ExibirEmUP("Cliente cadastrado com sucesso!");
                    LimparCampos();

                }
                catch (Exception ex)
                {
                    bllEndereco.Excluir(dtoCliente.EnderecoID);
                    bllVeiculo.Excluir(veiculoID);
                    Mensagem.ExibirEmUP("Não foi possível cadastrar o cliente!");
                }
            }
            else
            {
                Mensagem.ExibirEmUP("Dados incompletos! Verifique se os campos foram preenchidos corretamente.");
            }

        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            LimparCampos();
            Habilitar(true);
        }

        protected void txtCPF_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCPF.Text.Replace(".", "").Replace("-", "").Replace("_", "")))
            {
                string cpf = string.Format("{0:00000000000}", txtCPF.Text.Replace(".", "").Replace("-", ""));
                try
                {
                    imgValidacaoCPF.Visible = true;
                    if (BLLUtilidades.ValidarCPF(cpf))
                    {
                        if (bllCliente.VerificaSeClienteExistePorCPF(cpf))
                        {
                            if (bllCliente.VerificaSePossuiCadastroWeb(cpf))
                            {
                                imgValidacaoCPF.Visible = false;
                                lblValidacaoCPF.Text = "Você já possui cadastro! Efetue o login!";
                                btnCadastrar.ForeColor = System.Drawing.Color.Black;
                                btnCadastrar.Enabled = false;
                                Mensagem.ExibirEmUP("Você já está cadastrado no site! Para acessar efetue o Login!");
                                Habilitar(false);
                                txtCPF.Focus();
                            }
                            else
                            {
                                dtoCliente = bllCliente.BuscarClientePorCPF(cpf);

                                txtNome.Text = dtoCliente.Nome;
                                txtSobrenome.Text = dtoCliente.Sobrenome;
                                rblSexo.SelectedValue = dtoCliente.Sexo.ToString();
                                txtDataNascimento.Text = dtoCliente.DataNascimento.ToShortDateString();
                                txtTelefone.Text = dtoCliente.Telefone;
                                txtCelular.Text = dtoCliente.Celular;
                                txtEmail.Text = dtoCliente.Email;
                                txtLoginCad.Text = dtoCliente.Login;

                                dtoEndereco = bllEndereco.BuscarEnderecoPorEnderecoID(dtoCliente.EnderecoID);

                                txtCEP.Text = dtoEndereco.CEP;
                                txtRua.Text = dtoEndereco.Rua;
                                txtNumero.Text = dtoEndereco.Numero;
                                txtComplemento.Text = dtoEndereco.Complemento;
                                txtBairro.Text = dtoEndereco.Bairro;
                                txtCidade.Text = dtoEndereco.Cidade;
                                ddlEstado.SelectedValue = dtoEndereco.Estado.ToString();

                                Mensagem.ExibirEmUP("Você já está cadastrado em nossa base de dados! Confirme os dados para o cadastro no site!");
                            }
                        }
                        else
                        {
                            Habilitar(true);
                        }

                        imgValidacaoCPF.ImageUrl = "~/Imagens/disponivel.png";

                    }
                    else
                    {
                        imgValidacaoCPF.ImageUrl = "~/Imagens/indisponivel.jpg";
                        lblValidacaoCPF.Text = "*CPF Inválido!";
                        txtCPF.Focus();
                    }
                }
                catch
                {
                    imgValidacaoCPF.ImageUrl = "~/Imagens/indisponivel.jpg";
                    lblValidacaoCPF.Text = "*CPF Inválido!";
                    txtCPF.Focus();
                }
            }
            else
            {
                imgValidacaoCPF.Visible = false;
            }
        }

        protected void txtLoginCad_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtLoginCad.Text))
            {
                imgValidacaoLogin.Visible = true;
                if (bllCliente.VerificaSeLoginExiste(txtLoginCad.Text))
                {
                    lblValidacaoLogin.Text = "*Login Indisponível!";
                    imgValidacaoLogin.ImageUrl = "~/Imagens/indisponivel.jpg";
                    txtLoginCad.Focus();
                }
                else
                {
                    lblValidacaoLogin.Text = "";
                    imgValidacaoLogin.ImageUrl = "~/Imagens/disponivel.png";
                    txtRepetirLogin.Focus();
                }
            }
            else
            {
                imgValidacaoLogin.Visible = false;
            }
        }

        protected void txtEmail_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEmail.Text) && RegularExpressionValidatorEmail.IsValid)
            {
                imgValidacaoEmail.Visible = true;
                if (bllCliente.VerificaSeEmailExiste(txtEmail.Text))
                {
                    lblValidacaoEmail.Text = "*E-mail já cadastrado!";
                    imgValidacaoEmail.ImageUrl = "~/Imagens/indisponivel.jpg";
                    txtEmail.Focus();
                }
                else
                {
                    lblValidacaoEmail.Text = "";
                    imgValidacaoEmail.ImageUrl = "~/Imagens/disponivel.png";
                    txtRepetirEmail.Focus();
                }
            }
            else
            {
                imgValidacaoEmail.Visible = false;
            }
        }

        protected void txtSenhaCad_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtSenhaCad.Text))
            {
                imgValidacaoSenha.Visible = true;
                if (txtSenhaCad.Text.Length < 6)
                {
                    imgValidacaoSenha.ImageUrl = "~/Imagens/indisponivel.jpg";
                    lblValidacaoSenha.Text = "No mínimo 6 caracteres!";
                    txtSenhaCad.Focus();
                }
                else
                {
                    imgValidacaoSenha.ImageUrl = "~/Imagens/disponivel.png";                 
                    txtRepetirSenha.Focus();
                }
            }
            else
            {
                lblValidacaoSenha.Text = "";
                imgValidacaoSenha.Visible = false;
            }
            if (Session["Senha"] != null)
            {
                txtSenhaCad.Text = Session["Senha"].ToString();            
            }
        }

        protected void txtPlaca_TextChanged(object sender, EventArgs e)
        {
            string placa = txtPlaca.Text.Replace("-", "");
            if (bllVeiculo.VerificaSeVeiculoExistePorPlaca(placa))
            {
                dtoVeiculo = bllVeiculo.BuscarVeiculoPorPlaca(placa);

                veiculoID = dtoVeiculo.VeiculoID;
                txtPlaca.Text = dtoVeiculo.Placa;
                txtMarca.Text = dtoVeiculo.Marca;
                txtModelo.Text = dtoVeiculo.Modelo;
                txtAnoFab.Text = dtoVeiculo.AnoFab.ToString();
                txtAnoMod.Text = dtoVeiculo.AnoMod.ToString();
            }
            txtMarca.Focus();
        }

        protected void txtCaptcha_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCaptcha.Text))
            {
                imgValidacaoCaptcha.Visible = true;
                if (CheckCaptcha())
                {
                    imgValidacaoCaptcha.ImageUrl = "~/Imagens/disponivel.png";
                }
                else
                {
                    imgValidacaoCaptcha.ImageUrl = "~/Imagens/indisponivel.jpg";
                    lblValidacaoCaptcha.Text = "Sequência incorreta!";
                }
            }
            else
            {
                lblValidacaoCaptcha.Text = "";
                imgValidacaoCaptcha.Visible = false;
            }
        }

        protected void txtCEP_TextChanged(object sender, EventArgs e)
        {
            txtRua.Focus();
        }

        protected void CustomValidatorSexo_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                char selectedValue = Convert.ToChar(rblSexo.SelectedValue);

                if (selectedValue != 'M' && selectedValue != 'F')
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void CustomValidatorCPF_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                string cpf = string.Format("{0:00000000000}", txtCPF.Text.Replace(".", "").Replace("-", ""));

                if (!BLLUtilidades.ValidarCPF(txtCPF.Text) && bllCliente.VerificaSePossuiCadastroWeb(cpf))
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void CustomValidatorEmail_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                if (bllCliente.VerificaSeEmailExiste(txtEmail.Text))
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }

        }

        protected void CustomValidatorLogin_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                if (bllCliente.VerificaSeLoginExiste(txtLoginCad.Text))
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void CustomValidatorSenha_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                if (txtSenhaCad.Text.Length < 6)
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }

        }

        protected void CustomValidatorCaptcha_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {
                if (!CheckCaptcha())
                {
                    args.IsValid = false;
                }

                args.IsValid = true;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}